package com.itzmn.newcode.offer1;

/**
 * @Author: 张梦楠
 * @Date: 2018/12/18 15:26
 * 简书：https://www.jianshu.com/u/d611be10d1a6
 * 码云：https://gitee.com/zhangqiye
 * @Description:    跳台阶
 *
 *  一只青蛙一次可以跳上1级台阶，也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法（先后次序不同算不同的结果）。
 *
 *  跳台阶，这是个斐波那契数列，可以递归递归，可以循环，
 *  以下是循环,斐波那契数列是昨天和前天的和，所以只需要保存昨天和前天的值就好
 *
 */
public class _8_JumpingStairs {

    public static void main(String[] args) {
        new _8_JumpingStairs().test();
    }

    private void test() {

        JumpFloor(4);
    }

    public int JumpFloor(int target) {

        if (target==1){
            return 1;
        }
        if (target==2){
            return 2;
        }
        int OldStep1 = 2;
        int OldStep2 = 1;

        int num = 0;

        for (int i=3;i<=target;i++){

            // 计算当前台阶
            num = OldStep1+OldStep2;

            // 保存下一个台阶的前天，也就是现在这个台阶的昨天
            OldStep2 = OldStep1;
            // 保存下一个台阶的昨天,也就是现在这个台阶
            OldStep1 = num;
        }

        return num;
    }
}
